package com.sk.seckilldemo.service;

import com.sk.seckilldemo.entity.ProductInfo;
import com.sk.seckilldemo.mapper.ProductMapper;
import com.sk.seckilldemo.util.Pager;
import com.sk.seckilldemo.util.PagerData;
import com.sk.seckilldemo.util.Response;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 商品管理功能实现
 * e4glet
 * 2025年7月2日
 * */
@Service
@Transactional //增加事务处理注解
@RequiredArgsConstructor
public class ProductService {
    private final ProductMapper productMapper;

    /**
     * 添加商品
     * */
    public Response addProduct(ProductInfo productInfo){
        if(productMapper.addProduct(productInfo)>0){
            return Response.success();
        }else {
            return Response.error();
        }
    }

    /**
     * 编辑商品
     * */
    public Response editProduct(ProductInfo productInfo){
        if(productMapper.editProduct(productInfo)>0){
            return Response.success();
        }else{
            return Response.error();
        }
    }

    /**
     * 删除商品
     * */
    public Response deleteProduct(ProductInfo productInfo){
        if (productMapper.deleteProduct(productInfo)>0){
            return Response.success();
        }else{
            return Response.error();
        }
    }

    /**
     * 查询商品分页数据
     * */
    private List<ProductInfo> getProductMapper(Pager pager){
        Integer currentPage = pager.getCurrentPage();
        Integer startIndex = (currentPage - 1)*pager.getPageSize();
        pager.setStartIndex(startIndex);

        return productMapper.getProductMapper(pager);
    }

    /**
     * 查询商品分页数据总数
     * */
    private Integer getProductMapperCounts(Pager pager){
        return productMapper.getProductMapperCounts(pager);
    }

    /**
     * 手动计算分页
     * */
    private Integer getProductTotalPageBySearch(Pager pager){
        Integer productTotalCounts = getProductMapperCounts(pager);
        Integer pageTotal = 1; //初始设定当前只有一页
        //数据总条数除以pageSize每页显示条数，如取余数求模，如果有余数，页码+1
        //如果可以整除，则页码等于数据总数除以pageSize
        pageTotal = productTotalCounts/pager.getPageSize();
        if(productTotalCounts%pager.getPageSize()>0){
            pageTotal += 1;
        }
        return pageTotal;
    }

    /**
     * 根据查询得到分页数据和页面传给前端使用进行数据渲染
     * */
    public Response getProductPagerData(Pager pager){
        PagerData pagerData = new PagerData();
        pagerData.setData(getProductMapper(pager));
        pagerData.setTotal(getProductMapperCounts(pager));
        pagerData.setPageTotal(getProductTotalPageBySearch(pager));
        return Response.success(pagerData);
    }
}
